#ifndef AFFINE_MATRIX_H_
#define AFFINE_MATRIX_H_

class AffineMatrix
{
public:

    // Load Matrix
    float value[4][4];

    // Create Affine Matrix
    AffineMatrix(void);

    // Load Ortho Graphics
    void LoadOrtho(float left, float right, float bottom, float top, float near, float far);

    // Load Perspective
    void LoadPerspective(float fovy, float aspect, float near, float far);
    
    // Load Identity matrix
    void LoadIdentity();

    // Load Translate matrix
    void LoadTranslate(float vx, float vy, float vz);

    // Load a rotate matrix
    void LoadRotate(float alpha, float vx, float vy, float vz);

    // Load Scale matrix
    void LoadScale(float sx, float sy, float sz);
    
    // Multiply with another matrix
    void Multiply(const AffineMatrix &mat);

    // Destroy affine matrix
    ~AffineMatrix(void);
};

#endif

